static inline std::string demangle(const std::string& name)
{
#ifdef _MSC_VER
	return name;
#elif defined(__GNUC__)
	int status = 0;
	char* p = abi::__cxa_demangle(name.c_str(), 0, 0, &status);
	std::string ret(p);
	free(p);
	return ret;
#else
	return name;
#endif

}

template <class T>
std::string readable_typename()
{
	return demangle(typeid(T).name());
}

class cat{

public:
    int c;
}

int main()
{
	cat ddfda ;
	string str = readable_typename<decltype(ddfda)>();
    return 0;
}